#pragma once

#include "ckChecker.h"

namespace ck
{
	namespace data
	{
		class Landsat;
		class Schema;
		class LandsatRawMeta;
		class FieldDef;
	}
	namespace check
	{
		class CheckResult;
	}

	namespace check
	{
		class ZCORE_API LandsatMetaCorrectnessChecker : public Checker
		{
		public:
			LandsatMetaCorrectnessChecker();
			virtual ~LandsatMetaCorrectnessChecker();

		public:
			virtual RESULTCODE		Check();
			virtual CheckResult*	GetResult();

		public:
			//void	SetSchema(data::LandsatSchema* pSchema);
			//void	SetMetaData(data::LandsatRawMeta* pMeta);
			void	SetDataset(data::Landsat* pDataset);

		private:
			void	CheckDataType(CheckResult* pResult);
			void	CheckFileInfo(CheckResult* pResult);
			void	CheckProductMetaData(CheckResult* pResult);

			void	CheckItem(const char* szKey, const char* szText, data::FieldDef* pFieldDef, CheckResult* pResult);
			void	CheckItemType(const char* szKey, const char* szText, data::FieldDef* pFieldDef, CheckResult* pResult);
			void	CheckDecimals(const char* szKey, const char* szText, int decimals, CheckResult* pResult);
			void	CheckSnDecimals(const char* szKey, const char* szText, int decimals, CheckResult* pResult);

		private:
			bool	CheckProductID(const char* szPrudID);
			bool	CheckFileDate(const char* szFileDate);

			bool	CheckProductDataType(const char* szDataType);
			bool	CheckElevationSource(const char* szElevSource);
			bool	CheckSpacecraftID(const char* szSpacecraft);
			bool	CheckWRSPath(const char* szPath);
			bool	CheckWRSRow(const char* szRow);
			bool	CheckDataAcquried(const char* szDataAcquired);
			bool	CheckFileNameBand(int i, const char* szBandName);
			bool	CheckAngleCofficientFileName(const char* szAngleCoffFileName);
			bool	CheckMetaDataFileName(const char* szMetaDataFileName);
			bool	CheckGroundControlPointFileName(const char* szGCCFileName);
			bool	CheckReportVerifyFileName(const char* szReportVerifyFileName);
			bool	CheckBrowseVerifyFileName(const char* szBrowserVerifyFileName);

		private:
			data::Landsat		*m_pDataset;
			data::Schema		*m_pSchema;
			data::LandsatRawMeta *m_pMeta;

			CheckResult			 *m_pResult;
		};
	}
}



